# -*-  coding:utf-8 -*- 
# Author : lihongliang

"""
修改个人信息程序
在一个文件里存多个人的个人信息，如下：
username  password  age position  department
alex   abc123      24    engineer  IT
rain   def123      25   Teacher    Teaching

1 输入用户名密码，正确后登录系统，打印
1）修改个人信息
2）打印个人信息
3）修改密码
2每个选项写一个方法
3 登录时输错3次退出程序




本章小结  练习题
 文件处理
 1 编码问题
    1 请说明Python2 和Python3 中默认编码是什么？
    2 为什么会出现中文乱码？列举出现乱码情况有哪几种
    3 如何进行编码转换
    4 #-*--coding:utf-8 -*- 的作用是什么
        目前看来有三个作用。

    如果代码中有中文注释，就需要此声明
    比较高级的编辑器（比如我的emacs），会根据头部声明，将此作为代码文件的格式。
    程序会通过头部声明，解码初始化 u”人生苦短”，这样的unicode对象，（所以头部声明和代码的存储格式要一致）


    5 解释Python2 bytes VS Python3 bytes 区别
    
2 文件处理
    r 和rb区别是什么
    解释一下以下三个参数的分别作用
    open（f_name,'r', encoding= "utf-8"）
3 函数基础
    写函数，计算传入数字参数的和
    写函数，用户传入修改的文件名，与要修改的内容，执行函数，完成整个文件袋 批量修改操作
    写函数，检查用户传入的对象，（字符串，列表，元组）的每一个元素是否含有空内容
    写函数，检查传入字典的每一个value的长度，如果大于2，那么仅保留前两个长度的内容，并将新内容返回调用者
        dic = {"k1":"v1v1","k2":[11,22,33,44]}
        ps:字典中values 只能是字符串或列表
   
    介绍闭包的概念
        函数定义和函数表达式位于另一个函数的函数体内（嵌套函数），而且这些内部函数可以访问他们所在的外部函数中声明的所有局部变量，参数。
        当其中一个这样的内部函数在包含他们的外部函数之外被调用时，就形成了闭包。 
        也就是说，内部函数会在外部函数返回后被执行，而当这个内部函数执行的时候，它仍然必须范围其外部函数的局部变量，参数已经其他内部函数，
        这些局部变量，参数声明（最初时）的值是外部函数返回时候的值，但也会受到内部函数的影响。 
        
        闭包的意义：返回的函数对象，不仅仅是一个函数对象，在该函数外还包裹了一层作用域，这使得，该函数无论在何处调用，优先使用自己外层包裹的作用域
        
        简单的说，闭包就是内部函数+外部环境
    
4 函数进阶
    写函数，返回一个扑克牌列表，里面有52项目，每一项都是一个元组
        如：[("红心"，2),("草花",2),...("黑桃"，1)]
        
    写函数,传入n个书，返回字典{"max":最大值, 'min':最小值}
        如 min_max(2,5,7,10,4,1,3)
        返回：{"max":10,"min":1}
        
    写函数，专门计算图形面积
        其中嵌套函数，计算图的面积，正方形的面积和长方形的面积
        调用函数area（"图形"，圆半径）返回圆的面积
        调用函数area（"正方形"，边长）返回正方形的面积
        调用函数area（"长方形"，长,宽）返回正方形的面积
        def area():
            def 计算长方形面积():
                pass 
             def 计算正方形面积():
                pass   
            def 计算圆形面积():
                pass 
    写函数，传入一个参数n, 返回N的阶乘
    
    
"""